/*
@author: ztt
@file: 2022-12-02-ATM.go
@time: 2022/12/2 14:41
*/
package main

import (
	"fmt"
	"os"
)

type User struct {
	name string
	passwd string
	balance int
}

type ATM struct {
	bank string
	balance int
}

var users = map[string]User{}

func main()  {
	atm := ATM{
		bank: "中国农大银行",
		balance: 100000,
	}
	for {
		fmt.Println("1、登录")
		fmt.Println("2、注册")
		var option string
		fmt.Println("请输入你的选择，按q退出：")
		fmt.Scan(&option)
		switch option {
		case "q":
			os.Exit(1) //给出状态码并退出，0表示成功，非0表示出错并退出程序。
		case "1":
			for {
				var name string
				var passwd string
				fmt.Println("请输入用户名：")
				fmt.Scan(&name)
				fmt.Println("请输入密码：")
				fmt.Scan(&passwd)
				_, ok := users[name]
				if ok && users[name].passwd == passwd{
					fmt.Println("登录成功,欢迎来到",atm.bank)
					for {
						fmt.Println("1、存钱\n2、取钱\n3、查看余额")
						var op string
						fmt.Println("请输入你的选择(按q退出)：")
						fmt.Scan(&op)
						switch op {
						case "q":
							os.Exit(1)
						case "1":
							var money int
							fmt.Println("请输入存款金额：")
							fmt.Scan(&money)
							atm.save_money(users[name],money)
						case "2":
							var money int
							fmt.Println("请输入取款金额：")
							fmt.Scan(&money)
							atm.get_money(users[name],money)
						case "3":
							fmt.Println("您的余额为%d元\n",users[name].balance)
						default:
							fmt.Println("输入不合法")
						}
					}
				}else {
					fmt.Println("登陆失败，用户名或密码错误")
				}
			}
		case "2":
			var name string
			var passwd string
			var money int
			for {
				fmt.Println("请输入用户名：")
				fmt.Scan(&name)
				fmt.Println("请输入密码：")
				fmt.Scan(&passwd)
				fmt.Println("请输入充值金额：")
				fmt.Scan(&money)
				_,ok := users[name]
				if ok {
					fmt.Println("用户已经存在，请重新输入")
				}else {
					newuser := User{
						name: name,
						passwd: passwd,
						balance: money,
					}
					users[name] = newuser
					break
				}
			}
		default:
			fmt.Println("输入不合法")
		}

	}
}
func (atm *ATM) save_money(user User,money int) int {
	user.balance += money
	atm.balance += money
	fmt.Println("存入成功！余额为：",user.balance)
	users[user.name] = user
	return atm.balance
}
func (atm *ATM) get_money(user User,money int)  {
	if money > user.balance{
		fmt.Println("用户余额不足")
	}else if money > atm.balance{
		fmt.Println("ATM余额不足")
	}else {
		user.balance -= money
		atm.balance -= money
		fmt.Println("余额为：",user.balance,"ATM")
		users[user.name] = user
	}
}